package com.lagou.mr.wc;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

/**
 * 继承的Reduce类有4个范型参数
 * 第一对kv:与mapper输出类型一致，Text,IntWriter
 * 第二对kv:自己设计决定输出的结果数据
 *
 */
public class WordCountReducer extends Reducer<Text, IntWritable,Text,IntWritable> {

    /**
     * 第一对kv:
     * @param key  map方法中输出的key，本案例中就是单词
     * @param values  相同key 的kev val 组成的集合
     *                hello 1 hello 1 hello 1    values key:hello,values:<1,1,1>
     *                hadoop 1 hadoop 1           key:hadoop values<1,1>
     *                mapReduce  1                key:mapReduce values <1>
     * reduce何时调用 :一组相同的k v中的value组成集合，然后调用一次
     * @param context
     * @throws IOException
     * @throws InterruptedException
     */

    IntWritable total = new IntWritable();

    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        int sum = 0;
        for (IntWritable value : values) {
            int i = value.get();
            sum+=i;
        }
        total.set(sum);
        context.write(key,total);
    }
}
